from estadoItem import EstadoItem, db_session
from sqlalchemy import exc
from flask import flash
from estadoItem import estadoItem, EstadoItem
session = db_session()

class EstadoItemManager(object):
    """Clase encargada del manejo de estados de item"""
    def __init__(self):
        pass
    def __repr__(self):
        return '<EstadoItem Manager>'
    
    def guardarEstadoItem(self, estadoItem):
        """
        Metodo encargado de almacenar un estado de item en la base de datos
        @param estadoItem: Objeto estado item que se desea guardar.
        """
        session.add(estadoItem)
        try:
            session.commit()
        except exc.IntegrityError as ex:
            session.rollback()
            return flash("El estado ya existe", "error")
        else:
            return flash("Estado de item registrado exitosamente")
#        session.close()
        
    def eliminarEstadoItem(self, idestadoitem):
        """
        Metodo encargado de eliminar un estado de item de la base de datos
        @param idestadoitem: id del estado item que se desea eliminar.
        """
#        session = db_session()
        estadoItem = session.query(EstadoItem).filter(EstadoItem.idestadoitem == idestadoitem).first()
        session.delete(estadoItem)
        session.commit()
        
    def getEstadoItem(self, idestadoitem):
        """
        Metodo encargado de retornar estado de item dado su idestado
        @param idestadoitem: id del estado item que se desea obtener.
        """
        estadoItem = session.query(EstadoItem).filter(EstadoItem.idestadoitem == idestadoitem).first()
        return estadoItem
    
    def getEstadoItems(self):
        """Metodo encargado de retornar todos los estados de item"""
        estadoItems = session.query(EstadoItem)
        return estadoItems
    
    def getEstadoItemFiltradoPorNombre(self, nombre):
        """
        Metodo encargado de retornar un estado de item dado su nombre
        @param nombre: nombre del estado item que se desea obtener.
        """
        if nombre == "":
            nombre = "%"
        else:
            nombre = "%" + nombre + "%"
        estadoItem = session.query(EstadoItem).filter(EstadoItem.nombre.like(nombre))
        return estadoItem
    
    def getEstadoItemPorNombre(self, nombre):
        """
        Metodo encargado de retornar un estado de item dado su nombre
        @param nombre: nombre del estado item que se desea obtener.
        """
        estadoItem = session.query(EstadoItem).filter(EstadoItem.nombre == nombre).first()
        return estadoItem
    